home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / gui / gui4cli.lha / Gui4Cli / Ext / GCView / GCView.g < prev    next >
Encoding:
Gui4CLI script  |  1999-12-03  |  14.2 KB  |  602 lines

  1. G4C
  2.  
  3. ; Helper routines etc for GCView.gc
  4.  
  5. ; ------------------------------------------------------
  6. ; Palette changer
  7. ; ------------------------------------------------------
  8.  
  9. xRoutine InitPalette ; call  from xOnLoad
  10.     ; Initialise palette changer - look for palettes in same dir 
  11.     ; as gcview, if not found, use the palettes in guis:
  12.     palette = 0
  13.     extract gcview.g guipath mypath
  14.     JoinFile $mypath Palettes PalPath
  15.     lvuse #this 20
  16.     ifexists dir ~$PalPath
  17.         PalPath = guis:tools/palette
  18.     endif
  19.     lvdir #$PalPath
  20.  
  21.     ; set WB palette if available
  22.     ifexists screen Workbench
  23.         palette get Workbench tempimage
  24.         palette set tempimage GCView
  25.         freeimage tempimage
  26.     endif
  27.  
  28. XLISTVIEW 0 0 0 0 '' palfile '' 0 DIR
  29.     gadid 20
  30.  
  31. xRoutine NextPalette
  32.     lvuse #this 20
  33.     lvmulti none
  34.     lvgo #$palette
  35.     if $$lv.line = ''
  36.         palette = 0
  37.         lvgo #0
  38.     endif
  39.     lvmulti on
  40.     lvdir NoRefresh
  41.     lvmulti first
  42.     if $palfile H= 'G4C'
  43.         guiload $palfile gcview.gc
  44.     else
  45.         palette load $palfile tempimage
  46.         palette set tempimage GCView
  47.         freeimage tempimage
  48.     endif
  49.     ++palette
  50.  
  51. ; ------------------------------------------------------
  52. ;    Start GCView
  53. ; ------------------------------------------------------
  54.  
  55. xRoutine StartGCView
  56.     ; start gcview - should be in the same dir as us
  57.     ifexists port ~gcview
  58.         ifexists file gcview
  59.             run gcview
  60.         else
  61.             extract gcview.g guipath mypath
  62.             joinfile $mypath gcview gcvname
  63.             run $gcvname
  64.         endif
  65.         wait port gcview 30
  66.         if $$retcode > 0
  67.             ezreq 'Could not find & run GCView!\n' Abort ''
  68.             guiquit gcview.gc
  69.         endif
  70.     endif
  71.  
  72. ; ------------------------------------------------------
  73. ;    Open GCView & Init Screen position
  74. ;  - set gcview.gc/ scpos
  75. ; ------------------------------------------------------
  76.  
  77. xRoutine OpenGCView
  78.     local scheight/barheight/tempvar/winheight
  79.     scheight     = 256    ; defaults
  80.     barheight = 12
  81.     call gcview info pubscreen GCView
  82.     tempvar = $$call.ret
  83.     parsevar tempvar
  84.     if $$parse.total > 3
  85.         scheight     = $$parse.3
  86.         barheight = $$parse.5
  87.     endif
  88.  
  89.     ; open window right below menu bar & get actual height
  90.     ; changegad #this 0 -1 $barheight 0 95 '' ; doesn't work.. ?
  91.     guiopen gcview.gc
  92.     info gui gcview.gc
  93.     winheight = $$win.h
  94.  
  95.     ; move screen down..
  96.     gcview.gc/scpos = $($scheight - $barheight - $winheight)
  97.     movescreen gcview.gc 0 $gcview.gc/scpos
  98.     call gcview set pointer on
  99.  
  100.       update gcview.gc 27 'Time: $$sys.time[0][5]'
  101.  
  102. ; ------------------------------------------------------
  103. ;    GETBOXSIZE - Get edit box size
  104. ;  - if no edit box drawn, use full pic size
  105. ;  - set gcview.gc/ x, y, w, h
  106. ; ------------------------------------------------------
  107.  
  108. xRoutine GetBoxSize
  109.     local size
  110.  
  111.     ; get edit box size
  112.     call gcview info boxsize mypic
  113.     size = $$call.ret
  114.     parsevar size
  115.     gcview.gc/x = $$parse.0
  116.     gcview.gc/y = $$parse.1
  117.     gcview.gc/w = $$parse.2
  118.     gcview.gc/h = $$parse.3
  119.  
  120.     if $gcview.gc/w <= 0        ; no box? - use full picture size
  121.         call gcview info size mypic
  122.         size = $$call.ret
  123.         parsevar size
  124.         gcview.gc/w = $$parse.0
  125.         gcview.gc/h = $$parse.1
  126.         gcview.gc/x = 0
  127.         gcview.gc/y = 0
  128.     endif
  129.  
  130. ; ------------------------------------------------------
  131. ;    GETTYPE - Get File type: (NONE, PIC or ANIM)
  132. ;  - set gcview.gc/ type
  133. ; ------------------------------------------------------
  134.  
  135. xRoutine gettype
  136.     local header
  137.     readvar $gcview.gc/file 0 16 header        ; read the header
  138.     set deeptrans off
  139.     ; add here any other formats you have datatypes for
  140.     gcview.gc/type = NONE
  141.     docase $header
  142.         case S= 'FORM????ILBM' ; IFF
  143.         case S= "??????JFIF"      ; JPEG
  144.         case S= "ÿØÿÄ"              ; JPEG
  145.         case S= "GIF"              ; GIF
  146.         case S= "?PNG"              ; PNG
  147.             gcview.gc/type = PIC
  148.             break
  149.         case S= 'FORM????ANIM' ; ANIM
  150.             gcview.gc/type = ANIM
  151.     endcase
  152.     set deeptrans on
  153.  
  154. ; ------------------------------------------------------
  155. ;     SHOWINFO - Update info display..
  156. ;  - set gcview.gc/ frtotal, frames
  157. ; ------------------------------------------------------
  158.  
  159. xroutine showinfo
  160.     local info/oldtotal/frstart/frtotal/frcurr/name/loaded
  161.     extract gcview.gc/file file name
  162.  
  163.     if $gcview.gc/type = ANIM
  164.         call gcview info anim mypic
  165.         info = $$call.ret
  166.         parsevar info
  167.         oldtotal = $gcview.gc/frloaded ; to know if it's changed
  168.         frtotal    = $$parse.0
  169.         frstart    = $$parse.1
  170.         loaded   = $$parse.2
  171.         frcurr   = $$parse.4
  172.  
  173.         if $loaded > 0
  174.             update gcview.gc 10 '$frcurr\/$loaded $name ($frtotal)'
  175.         else
  176.             update gcview.gc 10 '$name : $frtotal'
  177.         endif
  178.  
  179.         gcview.gc/start = $frstart
  180.  
  181.         ; update sliders if No of frames has changed (new anim)..
  182.  
  183.         if $frtotal != $oldtotal
  184.             changearg gcview.gc 3 7 $frtotal
  185.             changearg gcview.gc 4 7 $frtotal
  186.             redraw gcview.gc
  187.         endif
  188.         update gcview.gc 3 $frstart
  189.         update gcview.gc 4 $loaded
  190.  
  191.     else
  192.         update gcview.gc 10 '$gcview.gc/type : $name'
  193.  
  194.     endif
  195.  
  196.     gcview.gc/frloaded = $loaded
  197.     gcview.gc/frtotal  = $frtotal
  198.     gcview.gc/frames   = $loaded
  199.  
  200. ; ------------------------------------------------------
  201. ;  TILE - if mirror=1 do mirror tile
  202. ; ------------------------------------------------------
  203.  
  204. xRoutine tilepic mirror
  205.     local info
  206.     guiwindow gcview.gc wait
  207.  
  208.     if $gcview.gc/type = ANIM
  209.         if $mirror = 1
  210.             call gcview tile mypic MIRROR
  211.         else
  212.             call gcview tile mypic
  213.         endif
  214.  
  215.     else
  216.         ; if there is a box, get size and crop it..
  217.         call gcview info boxsize mypic
  218.         info = $$call.ret
  219.         parsevar info
  220.         if $$parse.2 > 0
  221.             call gcview crop mypic
  222.         endif
  223.  
  224.         call gcview rename mypic brush
  225.         call gcview create mypic 640 512 8
  226.         call gcview open mypic
  227.         call gcview close brush
  228.         call gcview set palette mypic brush
  229.         if $mirror = 1
  230.             call gcview tile brush mypic MIRROR
  231.         else
  232.             call gcview tile brush mypic
  233.         endif
  234.         call gcview unload brush
  235.     endif
  236.  
  237.     guiwindow gcview.gc resume
  238.     guiscreen gcview.gc front
  239.  
  240. ; -----------------------------------------------------------
  241. ;    4 way mirror tile (for making bgnd patterns)
  242. ; -----------------------------------------------------------
  243.  
  244. xRoutine 4waymirrtile
  245.     local size/depth/sw/sh
  246.  
  247.     if $gcview.gc/type = ANIM
  248.         flash ; not for anims..
  249.         stop
  250.     endif
  251.  
  252.     ; get sizes
  253.     call gcview info size mypic
  254.     size = $$call.ret
  255.     parsevar size
  256.     depth = $$parse.2
  257.  
  258.     gosub gcview.g getboxsize
  259.     sw == $gcview.gc/w * 2
  260.     sh == $gcview.gc/h * 2
  261.  
  262.     ; prepare background for tiling..
  263.     call gcview rename mypic brush
  264.     call gcview create mypic $sw $sh $depth
  265.     call gcview open mypic
  266.     call gcview close brush
  267.     call gcview set palette mypic brush
  268.  
  269.     ; paste & flip & paste...
  270.     call gcview paste brush mypic 0 0
  271.     call gcview flip brush horizontal
  272.     call gcview paste brush mypic $gcview.gc/w 0
  273.     call gcview flip brush vertical
  274.     call gcview paste brush mypic $gcview.gc/w $gcview.gc/h
  275.     call gcview flip brush horizontal
  276.     call gcview paste brush mypic 0 $gcview.gc/h
  277.  
  278.     ; finished..
  279.     call gcview unload brush
  280.     guiscreen gcview.gc front
  281.  
  282. ; -----------------------------------------------------------
  283. ;    BUILD full size pic - use marked area to fill blank part
  284. ; -----------------------------------------------------------
  285.  
  286. xRoutine BuildPic
  287.     local size/depth/width/sw/sh/w
  288.  
  289.     if $gcview.gc/type = ANIM
  290.         flash ; not for anims..
  291.         stop
  292.     endif
  293.  
  294.     ; store the marked area
  295.     gosub gcview.g getboxsize
  296.     sw = $gcview.gc/w
  297.     sh = $gcview.gc/h
  298.     call gcview copy mypic myclip
  299.  
  300.     ; get pic size & depth
  301.     call gcview info size mypic
  302.     size = $$call.ret
  303.     parsevar size
  304.     width = $$parse.0
  305.     depth = $$parse.2
  306.  
  307.     ; prepare background..
  308.     call gcview rename mypic brush
  309.     call gcview create mypic 640 512 $depth
  310.     call gcview open mypic
  311.     call gcview close brush
  312.     call gcview set palette mypic brush
  313.     call gcview paste brush mypic 0 0
  314.    call gcview unload brush
  315.  
  316.    ; paste brush the right way
  317.     w = $($width + $sw)
  318.    while $w < 640
  319.         call gcview paste myclip mypic $w 0
  320.         w = $($w + ($sw * 2))
  321.     endwhile
  322.  
  323.     ; flip & paste between
  324.     call gcview flip myclip horizontal
  325.     w = $width
  326.    while $w < 640
  327.         call gcview paste myclip mypic $w 0
  328.         w = $($w + ($sw * 2))
  329.     endwhile
  330.  
  331.     ; finished..
  332.     call gcview unload myclip
  333.     guiscreen gcview.gc front
  334.  
  335. ; -----------------------------------------------------------
  336. ;    SAVE - pic/anim
  337. ; -----------------------------------------------------------
  338.  
  339. xRoutine Save
  340.     local fname/fileline/savename
  341.  
  342.     if $gcview.gc/file > ' '        ; file name for reqfile
  343.         fname = $gcview.gc/file
  344.     else
  345.         fname = T:GCPic
  346.     endif
  347.  
  348.     ; store the current line in lv, so we can go back to it
  349.     lvuse gcview.gc 1
  350.     fileline = $$lv.line
  351.  
  352.     savename = ''
  353.     call gcview move pubscreen GCView 0 15
  354.     ReqFile -1 -1 300 -40 'Save current picture:' SAVE savename #$fname
  355.     call gcview move pubscreen GCView 0 $gcview.gc/scpos
  356.  
  357.     if $savename > ''
  358.         ifexists file $savename
  359.             ezreq 'File already exists:\n- $savename\nOverwite ?' OverWrite|Cancel choice
  360.             if $choice = 0
  361.                 stop ; user cancelled
  362.             endif
  363.         endif
  364.         guiwindow gcview.gc wait
  365.         call gcview save mypic '$savename'
  366.         gcview.gc/lastfileloaded = $savename
  367.         guiwindow gcview.gc resume
  368.  
  369.         ; refresh the dir, and go to previously current line
  370.         lvdir refresh
  371.         lvmove #$fileline
  372.         lvgo #$fileline
  373.         lvmulti on
  374.     endif
  375.  
  376. ; -----------------------------------------------------------
  377. ;    SHOWFILE
  378. ; -----------------------------------------------------------
  379.  
  380. xRoutine showfile
  381.     gosub gcview.g gettype
  382.  
  383.     if $gcview.gc/type  != NONE            ; Picture
  384.     and $gcview.gc/type != ANIM
  385.         if $gcview.gc/dmode = BG            ; normal background
  386.             call gcview info size mypic
  387.             if $$call.ret = ''    ; no pic yet..
  388.                 call gcview load $gcview.gc/file mypic
  389.                 call gcview open mypic
  390.             else
  391.  
  392.                 call gcview rename mypic oldpic
  393.                 call gcview load $gcview.gc/file mypic
  394.                 call gcview open mypic
  395.                 call gcview unload oldpic
  396.                 
  397.                 ; #### COMMENTED OUT - NO Fade..
  398.                 ; call gcview rename mypic oldpic
  399.                 ; call gcview load $gcview.gc/file mypic
  400.                 ; if $$retcode > 0                    ; no memory..
  401.                     ; call gcview unload oldpic
  402.                     ; call gcview load $gcview.gc/file mypic
  403.                     call gcview open mypic
  404.                 ; else
  405.                     ; call gcview open mypic behind
  406.                     ; call gcview tranzit oldpic mypic FADE 3
  407.                     ; call gcview unload oldpic
  408.                 ; endif
  409.  
  410.             endif
  411.             if $gcview.gc/usepalette = ON
  412.                 call gcview set palette mypic mypal
  413.             endif
  414.             gcview.gc/bgdir = $$lv.dir
  415.             gosub gcview.g showinfo
  416.         elseif $gcview.gc/dmode = BR        ; paste brush mode
  417.             gosub GCVIEW.GC pastebrush
  418.         endif
  419.  
  420.     elseif $gcview.gc/type = ANIM
  421.         if $gcview.gc/dmode = BG
  422.             gcview.gc/bgdir = $$lv.dir
  423.             gosub #this playanim 0            ; 0=load as many frames as posible
  424.             if $gcview.gc/usepalette = ON
  425.                 call gcview set palette mypic mypal
  426.             endif
  427.             gosub gcview.g showinfo
  428.         else                                        ; paste anims onto each other
  429.             gosub GCVIEW.GC pastebrush
  430.         endif
  431.  
  432.     else
  433.         ; use default gui to handle file
  434.         guiload guis:tools/rtn/filepop $gcview.gc/file
  435.         gosub gcview.g showinfo
  436.     endif
  437.  
  438. ; -----------------------------------------------------------
  439. ;    PASTEBRUSH - paste brush into edit box
  440. ; -----------------------------------------------------------
  441.  
  442. xroutine pastebrush
  443.     local bname
  444.  
  445.     bname = ''
  446.     movescreen gcview.gc 0 12
  447.     ReqFile -1 -1 350 -30 'Choose brush:' LOAD bname '.Art:'
  448.     movescreen #this 0 $gcview.gc/scpos
  449.     if $bname = ''
  450.         stop
  451.     endif
  452.  
  453.     if $bname H= 'FORM????ANIM' ; ANIM
  454.         call gcview anload $bname brush 0 1000 FORWARD
  455.     else
  456.         call gcview load $bname brush
  457.     endif
  458.     ; store dir
  459.     extract bname path gcview.gc/brushdir
  460.  
  461.     ; get edit box size
  462.     gosub gcview.g getboxsize
  463.  
  464.     ; adjust & paste brush
  465.     call gcview resize brush $gcview.gc/w $gcview.gc/h
  466.     call gcview paste brush mypic $gcview.gc/x $gcview.gc/y
  467.     call gcview unload brush
  468.     guiscreen gcview.gc front
  469.  
  470. ; -----------------------------------------------------------
  471. ;    PLAYANIM
  472. ; -----------------------------------------------------------
  473.  
  474. xRoutine playanim userange            ; play anim - if userange=1, use the
  475.     ;local userange
  476.  
  477.     call gcview unload mypic        ; start/frame values as set
  478.  
  479.     if $gcview.gc/loadall == ON
  480.         if $userange = 1
  481.             call gcview anload $gcview.gc/file mypic $gcview.gc/start $gcview.gc/frames $gcview.gc/andir
  482.         else
  483.             call gcview anload $gcview.gc/file mypic 0 1000 $gcview.gc/andir
  484.         endif
  485.     else
  486.         call gcview load $gcview.gc/file mypic
  487.     endif
  488.  
  489.     call gcview open mypic
  490.     guiscreen gcview.gc front
  491.  
  492. ; -----------------------------------------------------------
  493. ;    RAW & VANILLA KEYs
  494. ; -----------------------------------------------------------
  495.  
  496. xRoutine dorawkey
  497.     docase $$rawkey.code
  498.         case = 78                            ; right arrow - inc speed
  499.             call gcview set speed mypic +1
  500.             break
  501.         case = 79                            ; left arrow  - dec speed
  502.             call gcview set speed mypic -1
  503.             break
  504.         case = 76                            ; up arrow    - next frame
  505.             call gcview set frame mypic +1
  506.             gosub gcview.g showinfo
  507.             break
  508.         case = 77                            ; down arrow  - prev frame
  509.             call gcview set frame mypic -1
  510.             gosub gcview.g showinfo
  511.             break
  512.     endcase
  513.  
  514. xRoutine dovankey
  515.     docase $$vankey.code
  516.         case = 13                            ; next pic
  517.         case = 32
  518.             gosub gcview.gc ViewNext
  519.             break
  520.     endcase
  521.  
  522. ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  523. ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  524.  
  525.     NEWFILE gettext    ; get a string
  526.  
  527. ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  528. ; &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  529.  
  530. WINBIG 13 11 617 21 "Enter or alter text:"
  531. WinType 11110010
  532. usetopaz
  533. BOX 0 0 0 0 out button
  534.  
  535. xOnOpen
  536.     setgad getstring 1 ON
  537.  
  538. XTEXTIN 3 3 490 15 "" string "" 1000
  539.     attr resize 0022
  540.     gadid 1
  541.     ; guiclose #this
  542.     ; gosub #this txtpaste
  543.  
  544. XBUTTON 495 3 28 15 "Tx"    ; load text
  545.     attr resize 2002
  546.     local tc
  547.     txtfile = ''
  548.     movescreen #this 0 12
  549.     ReqFile -1 -1 350 -30 'Choose text:' LOAD txtfile 'EH2:store/wrd'
  550.     if $txtfile > ''
  551.         ifexists file ~$txtfile                ; correct ending space (old)
  552.             cutvar txtfile cut char -1 tc
  553.             appvar txtfile ' $tc'
  554.         endif
  555.         copy $txtfile env:.txtfile
  556.         update #this 1 '$.txtfile'
  557.     endif
  558.     movescreen #this 0 $gcview.gc/scpos
  559.  
  560. XBUTTON 525 3 28 15 "Kb"    ; Keyboard
  561.     attr resize 2002
  562.     guiload s:gui/keybd.g
  563.     
  564. XBUTTON 555 3 28 15 "Sv"    ; Save
  565.     attr resize 2002
  566.     local c
  567.     if $string > ''
  568.         dir = ''
  569.         ReqFile -1 -1 300 -60 'Save in which dir?' DIR dir "EH2:store/wrd"
  570.         guiclose #this
  571.         if $dir > ''
  572.             .dummy = "$string"
  573.             ; make file name - discard ending spaces
  574.             name = $string[0][30]
  575.             extract name clean name
  576.             JoinFile $dir "$name" name
  577.             copy env:.dummy $name
  578.             copy env:.dummy ram:.SENTENCE
  579.         else
  580.             flash
  581.         endif
  582.     endif
  583.  
  584. XBUTTON 585 3 28 15 "Ok"    ; finished editing
  585.     attr resize 2002
  586.     gosub #this txtpaste
  587.  
  588. xRoutine txtpaste
  589.     local bright/dark
  590.     guiscreen #this back
  591.     call gcview getcolor mypic 200 200 200
  592.     bright = $$call.ret
  593.     cutvar bright cut word 1 bright
  594.     call gcview getcolor mypic 50 50 50
  595.     dark = $$call.ret
  596.     cutvar dark cut word 1 dark
  597.     call gcview set pens $bright $dark OUTLINE
  598.     gosub gcview.g GetBoxSize
  599.     call gcview text mypic $gcview.gc/x $gcview.gc/y '$string'
  600.     guiclose #this
  601.  
  602.